/*
 * @Author: chentao 
 * @Date: 2022-05-17 14:42:31 
 * @Last Modified by: chentao
 * @Last Modified time: 2022-05-17 15:45:00
 * 参考typescript书本阅读入门与实战
 * 调用签名
 */
//就是本来定义一个字面量函数类型 本来这里外面的括号可以省略
let addFunc:{ (x:number):number}  //这个是对象类型字面量，因为函数也是对象，只不过它是特殊的可调用的对象
let addFunc2:(x:number)=>number;  //外面的括号可以省略
let addFunc3:Function;
//addFunc3
addFunc3=function(name:string,age:number){
    console.log(`输出结果:${name} ${age}`)
}
addFunc3("张无忌",23)

let TypeA:{ new (name:string,age:number):object}

//再写一个
TypeA= class TypeAmodel{
     private name:string;
     private age:number;
     constructor(name:string,age:number){
         this.name= name;
         this.age = age;
     }
}
// TypeA = TypeAmodel
let typeA= new TypeA("name",23);

//这个
function func5128(name:string){
    console.log(`输出name:${name}`)
}
func5128("深圳南山区")
func5128.version ="放p";  
console.log(func5128.version)

//如果这里使用函数类型字面量 来表示  添加属性编译就会报错
let func5128_2:(name:string)=> string ;
func5128_2= function(name:string){
  return name+"——pinjie";
}
const func5128_2Res=func5128_2("typescript")
console.log(func5128_2Res)

//假设使用函数字面量类型  来添加属性就会报错
//const version = func5128_2.version; //编译报错

//但是如果使用对象类型字面量类型 来表示函数的类型 就可以添加属性
let func5128_3:{ 
     (x:number):number
};
function func5128Number(name:number){
    console.log(`输出name:${name}`)
}
func5128Number(6)
func5128Number.version ="放p";  
console.log(func5128Number)

func5128_3 = new func5128Number(23)

